# 读取文件client_data.json， 以下数据
# 1. lastUpdateTime为近3天内的节点数目
# 2. users大于5的节点数目，及对应的users数目
# 3. answers大于5的节点数目，及对应的answers数目
# 4. 打印总用户数，如果users<=2，算1个用户，否则算users-1个用户
# 5. 打印总的answers数目

import json
from datetime import datetime, timedelta

def analyze_client_data():
    # 读取JSON文件（修正：JSON为键值对结构，需获取values()）
    with open('client_data.json', 'r', encoding='utf-8') as f:
        data = json.load(f)
        nodes = data.values()  # 获取所有节点数据（排除UUID键）

    # 初始化统计变量
    count_last_update = 0
    count_users_gt5 = 0
    users_gt5_list = []
    count_answers_gt5 = 0
    answers_gt5_list = []
    total_users = 0
    total_answers = 0

    # 计算近3天的时间阈值
    three_days_ago = datetime.today() - timedelta(days=3)

    # 遍历所有节点进行统计
    for node in nodes:
        # 跳过空键节点（JSON中存在空字符串键的节点）
        if not node:
            continue

        # 1. 统计lastUpdateTime在近3天内的节点
        update_time_str = node.get('lastUpdateTime')
        if update_time_str:
            try:
                update_time = datetime.fromisoformat(update_time_str)
                if update_time >= three_days_ago:
                    count_last_update += 1
            except ValueError:
                pass  # 忽略格式错误的时间

        # 2. 统计users大于5的节点
        users = node.get('users', 0)
        if users > 5:
            count_users_gt5 += 1
            users_gt5_list.append(users)
        # 4. 计算总用户数（users<=2算1个，否则算users-1个）
        if users <= 2:
            total_users += 1
        else:
            total_users += (users - 1)

        # 3. 统计answers大于5的节点
        answers = node.get('answers', 0)
        if answers > 5:
            count_answers_gt5 += 1
            answers_gt5_list.append(answers)
        # 5. 累加总answers数目
        total_answers += answers

    # 输出结果
    print(f"1. 近3天内活跃的节点数目: {count_last_update}")
    print(f"2. 用户数大于5的节点数目: {count_users_gt5}, 对应的用户数目: {users_gt5_list}")
    print(f"3. 答题次数大于5的节点数目: {count_answers_gt5}, 对应的答题次数: {answers_gt5_list}")
    print(f"4. 总用户数: {total_users}")
    print(f"5. 总答题次数: {total_answers}")

if __name__ == "__main__":
    analyze_client_data()